#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

// 函数一：十六进制转十进制
int hex_to_decimal(char *hex) {
    int decimal;
    sscanf(hex, "%x", &decimal);
    return decimal;
}

// 函数二：判断是否是素数
int is_prime(int num) {
    if (num < 2) return 0;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return 0;
    }
    return 1;
}

// 函数三：求最大公约数
int gcd(int a, int b) {
    while (b) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 函数四：求最小公倍数
int lcm(int a, int b) {
    return abs(a * b) / gcd(a, b);
}

// 函数五：冒泡排序
void bubble_sort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

// 函数六：二维数组转置
void transpose_matrix(int matrix[3][3], int transposed[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }
}

// 函数七：二维数组输出
void print_matrix(int matrix[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

// 函数八：计算方差
double variance(int arr[], int n) {
    double mean = 0, var = 0;
    for (int i = 0; i < n; i++) {
        mean += arr[i];
    }
    mean /= n;
    for (int i = 0; i < n; i++) {
        var += (arr[i] - mean) * (arr[i] - mean);
    }
    return var / n;
}

// 函数九：整数转字符串并存入字符串数组
void int_to_string(int n, char *result) {
    sprintf(result, "%d", n);
}

// 函数十：字符串反序
void reverse_string(char *s) {
    int len = strlen(s);
    for (int i = 0; i < len / 2; i++) {
        char temp = s[i];
        s[i] = s[len - i - 1];
        s[len - i - 1] = temp;
    }
}

// 函数十一：字符串连接
void concatenate_strings(char *s1, char *s2, char *result) {
    strcpy(result, s1);
    strcat(result, s2);
}

// 主程序
int main() {
    char hex_numbers[10][10];
    int decimal_numbers[10];

    // 输入十个十六进制数字
    for (int i = 0; i < 10; i++) {
        scanf("%s", hex_numbers[i]);
        decimal_numbers[i] = hex_to_decimal(hex_numbers[i]);
    }

    // 第1行：十六进制转十进制
    for (int i = 0; i < 10; i++) {
        printf("%d ", decimal_numbers[i]);
    }
    printf("\n");

    // 第2行：判断是否是素数
    for (int i = 0; i < 10; i++) {
        printf("%c ", is_prime(decimal_numbers[i]) ? 'Y' : 'N');
    }
    printf("\n");

    // 第3行：前两个数的最大公约数
    printf("%d\n", gcd(decimal_numbers[0], decimal_numbers[1]));

    // 第4行：前两个数的最小公倍数
    printf("%d\n", lcm(decimal_numbers[0], decimal_numbers[1]));

    // 第5行：冒泡排序
    int sorted_numbers[10];
    for (int i = 0; i < 10; i++) {
        sorted_numbers[i] = decimal_numbers[i];
    }
    bubble_sort(sorted_numbers, 10);
    for (int i = 0; i < 10; i++) {
        printf("%d ", sorted_numbers[i]);
    }
    printf("\n");

    // 第6行：计算方差
    printf("%.2f\n", variance(decimal_numbers, 10));

    // 第7行：空行
    printf("\n");

    // 第8、9、10行：3×3二维数组输出
    int matrix[3][3];
    for (int i = 0; i < 9; i++) {
        matrix[i / 3][i % 3] = sorted_numbers[i];
    }
    print_matrix(matrix);

    // 第11行：空行
    printf("\n");

    // 第12、13、14行：转置后的3×3二维数组输出
    int transposed[3][3];
    transpose_matrix(matrix, transposed);
    print_matrix(transposed);

    // 第15行：空行
    printf("\n");

    // 第16行：字符串操作
    char string_results[10][20];
    for (int i = 0; i < 10; i++) {
        int_to_string(sorted_numbers[i], string_results[i]);
        reverse_string(string_results[i]);
    }

    for (int i = 0; i < 10; i += 2) {
        char concatenated[40];
        concatenate_strings(string_results[i], string_results[i + 1], concatenated);
        printf("%s ", concatenated);
    }
    printf("\n");

    return 0;
}